VB備忘録

VB備忘録

Visual Basic(VB, VBS, VBA)に関する備忘録です。

目次

 VB Scriptのインストール方法
 VBSの実行方法
 VBの注意すべき仕様

  1. 変数の宣言
  2. 定数定義
  3. 演算子
  4. Ifステートメント
  5. Forステートメント
  6. Doステートメント
  7. Whileステートメント
  8. Withステートメント
  9. GoToステートメント
  10. Select Caseステートメント
  11. Setステートメント
  12. Subステートメント
  13. Functionステートメント
  14. Classステートメント
  15. VB Scriptの関数一覧




VB Scriptのインストール方法

Windows10にはVBS(WSH)が最初からインストールされているので何もしなくても使用できます。


VBSの実行方法

①例えばfirst.vbsというファイルがc:\にあるときは、コマンドプロンプトより

	c:\>cscript first.vbs
	c:\>wscript first.vbs

と入力すれば実行可能です。 cscriptとwscriptの違いは、バッチ処理的に実行する場合にはcscriptを、対話的に実行する場合にはwscriptを用います。 まぁ実際にやってみた方が良く分かるかと思います。


②エクスプローラーで.vbsファイルアイコンをダブルクリックする。 この場合にはwscriptで実行されます。


VBの注意すべき仕様

①ソースコードは大文字・小文字を区別しません。
②VBSでは行末にブランク+アンダーバー(" _")を付けることで1行のステートメントを複数行にわたって記述することができます。 VBでは自動的に強制削除されてしまうので使用できません(Visual Studio 2017のVBで確認)。
③ソースプログラムの先頭に「Option Explicit」というオプションを記述しておくと宣言されていない変数を使用することができなくなります。 つまらないバグを抑制するために必ず付けるようにしましょう。ちなみにVBでは「Option Explicit On」と記述して下さい。




ページのTOPへ



1.変数の宣言

変数を宣言するには Dim を使います。
VBSでは型指定はできないので注意して下さい!

VBでの型宣言(VBS では型指定できないので As 以降が指定できません!!)

	Dim	x
	Dim i As Integer
	Dim j(2,3) As Integer
※配列は0から使えるので、
  Dim arr(3)
と宣言した場合には arr(0)~arr(3)までの4個使えます!



VBの型(しつこいですがVBSでは宣言時、型指定できません!)

ブール型BooleanTrueまたはFalse
バイト型Byte0~255までの整数
整数型Integer-32,768~32,767の整数
長整数型Long-2,147,483,648~2,147,483,647の整数
通貨型Currency-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807の固定小数点数
単精度浮動小数点数型Single負の値:約-3.4×10(38乗)~-1.4×10(-45乗)正の値:約1.4×10(-45乗)~1.8×10(38乗)
倍精度浮動小数点数型Double負の値:約-1.8×10(308乗)~-4.0×10(-324乗)正の値:約4.9×10(-324乗)~1.8×10(308乗)
日付型 Date日付:西暦100年1月1日~西暦9999年12月31日時刻:0:00:00 ~ 23:59:59
文字列型String任意の長さの文字列
オブジェクト型Objectオブジェクト
バリアント型Variantすべてのデータ



型変換(VBS関数リファレンスより)

VBSでは宣言時に型指定できませんが、内部では型が存在するので型変換が必要になることがあります!
CBool 関数ブール型 (Boolean) に変換する
CByte 関数バイト型 (Byte) に変換する
CCur 関数通貨型 (Currency) に変換する
CDate 関数日付型 (Date) に変換する
CDbl 関数倍精度浮動小数点数型 (Double) に変換する
CInt 関数整数型 (Integer) に変換する
CLng 関数長整数型 (Long) に変換する
CSng 関数単精度浮動小数点型 (Single) に変換する
CStr 関数文字列型 (String) に変換する



チェック関数(あまり使わないかも...)

IsArray 関数変数が配列であるかどうかを調べる
IsDate 関数日付に変換できるかどうかを調べる
IsEmpty 関数変数が初期化されたかどうかを調べる
IsNull 関数Null かどうかを調べる
IsNumeric 関数数値として評価できるかどうかを調べる
IsObject 関数オブジェクトを参照しているかどうかを調べる
TypeName 関数変数のデータ型を表す文字列を調べる
VarType 関数変数のデータ型を表す数値を調べる



ページのTOPへ



2.定数定義

定数を定義するにはConstを用います。

	Const DATA = 1
	Const MSG = "Message"



ページのTOPへ



3.演算子

+
-
*
/
Mod剰余(割り算した結果の余りを返す)
^指数演算 5 ^ 2 = 5の2乗
\2つの数値の商を計算し、結果を整数で返します。
number1 \ number2 (number1,2は数式である)
除算を実行する前に、数式は内部処理形式がバイト型 (Byte)、整数型 (Integer)、または長整数型 (Long) の式に丸められます。
&(+)文字列に対して &(+) を使用すると文字列を連結します!
=
<>
<
>
<=
>=
Isオブジェクト比較
Not(ブール型でないときはビット演算になる!)
And(ブール型でないときはビット演算になる!)
Or(ブール型でないときはビット演算になる!)
Xor(ブール型でないときはビット演算になる!)
Eqv論理等価演算
Imp論理包含演算



ページのTOPへ



4.Ifステートメント

	(1)If ~ Then

	(2)If ~ Then
	   Else
	   End If

	(3)If ~ Then
	   ElseIf ~ Then
	   Else
	   End If



ページのTOPへ



5.Forステートメント

(1)For ~ Nextステートメント

	For i = 0 To 5
		(処理)
		If 条件 Then Exit For	'条件によりForループを抜ける
	Next

Stepも使えます。
VBSでは使えませんが、Continue For文もあります。



(2)For Each ~ Nextステートメント

配列の要素の値を取得し、配列の要素すべてに対して処理が終了するまでループする!

	Dim arr(3)
	Dim i
	
	arr(0) = 1
	arr(1) = 3
	arr(2) = 5
	arr(3) = 10
	
	For Each i In  arr
		MsgBox(i)	'要素の値を順番に表示
	Next



ページのTOPへ



6.Doステートメント

(1)無限ループ

	Do
		if ~ Then Exit Do	'ループを抜ける
	Loop


VBSでは使えませんが、Continue Do文もあります。



(2)処理前に条件判定

	Do (Until or While) 条件	'Untilは条件がFalseの間実行し、Whileは条件がtrueの間実行する
		'ループを抜けるときは Exit Do を用いる!
	Loop



(3)処理後に条件判定(必ず1回は実行されます)

	Do
		'ループを抜けるときは Exit Do を用いる!
	Loop (Until or While) 条件	'Untilは条件がFalseの間実行し、Whileは条件がtrueの間実行する



ページのTOPへ



7.Whileステートメント

ループ処理にはDoループよりもっと単純なWhileステートメントもあるそうな...

	While <条件>
		ステートメント…
	Wend
	Dim	a
	a = 1
	while a=1
		str = InputBox("1以外で終了")
		a = CInt(str)
	Wend



ページのTOPへ



8.Withステートメント

Withステートメント内では、指定したオブジェクト名を省略して記述することができます。

	With オブジェクト名
		(オブジェクト名)を省略して記述できる!
	End With



ページのTOPへ



9.GoToステートメント

ジャンプ命令ですが、VBSにはGoTo命令はありません。

	GoTo label01
	MsgBox("このメッセージボックスは実行されません。")

label01:
	MsgBox("ジャンプ先のメッセージボックスです。")



ページのTOPへ



10.Select Caseステートメント

Caseの条件の書き方がいくつか種類があるのでサンプルプログラムをよく見てね!

	Select Case 変数
	 Case 条件1
	  条件1が真(True)の場合に実行される処理
	 Case 条件2
	  条件2が真(True)の場合に実行される処理
	・・・
	 Case Else
	  すべての条件式が偽(False)の場合に実行される処理
	End Select
	Dim a
	a = 10

	Select Case a
		Case 0, 1		'条件はカンマで区切って複数指定可能です
			MsgBox("0 or 1")
		Case 2
			MsgBox("2")
		Case 3, 4, 5
			MsgBox("3, 4, 5")
		Case Else
			MsgBox("6以上")
	End Select


以下の2つのサンプルプログラムはVBSではエラーになり、実行できません。

	Dim a
	a = 10
	
	Select Case a
		Case 1 To 5
			MsgBox("1~5")
		Case 6 To 10
			MsgBox("6~10")
		Case 11 To 15
			MsgBox("11~15")
		Case Else
			MsgBox("16以上")
	End Select
    Dim a
    a = 10

    Select Case a
		Case Is >= 15
			MsgBox("15以上")
		Case Is >= 10
			MsgBox("10~14。")
		Case Is >= 5
			MsgBox("5~9")
		Case Else
			MsgBox("4以下")
	End Select



ページのTOPへ



11.Setステートメント

オブジェクト変数にオブジェクトを代入するときはSetを使用しなければならない!

下記のサンプルプログラムはExcelのVBAのサンプルプログラムです。

	Dim ws As Worksheet
	Set ws = Sheets("Sheet1")
	MsgBox(ws.Name)
	Set ws = Nothing	'オブジェクト破棄



Set ws = Sheets("Sheet1") は、変数wsにシート[Sheet1]を代入する命令です。
この変数wsの型は、宣言時に「As Worksheet」と指定されています。
オブジェクト変数は「As オブジェクト名」のように、オブジェクト名を使って型指定をします。
ワークシート(Worksheetオブジェクト)を格納する変数なら「As Worksheet」、
ブック(Workbookオブジェクト)を格納する変数なら「As Workbook」、
セル(Rangeオブジェクト)を格納する変数では「As Range」のように型指定をします。
また、すべてのタイプのオブジェクトを表す総称Objectを使って、
どんなオブジェクトでも格納できるオブジェクトの変数は「As Object」と指定します。


オブジェクト型で宣言したオブジェクト変数にオブジェクトを格納するときは、Setを使わなければなりません。


使い終わったオブジェクト変数にNothingを代入すると、オブジェクトを破棄できます。




ページのTOPへ



12.Subステートメント

いわゆるサブルーチンです。
引数も指定可能です...が、VBSでは型指定が出来ないので変数名を並べて書くだけで良いようです。

	Sub サブルーチン名()
	...
	If 条件 Then Exit Sub	'サブルーチンから復帰
	...
	End Sub
重要:参照渡しと値渡し
プロシージャに引数を渡す場合、「参照渡し(call by reference)」と「値渡し(call by value)」という2つの方法があります。(参照渡しはポインタ渡しで、値渡しは普通の引数...C言語の場合の話)

VBScriptにおける引数は、デフォルトでは参照渡しであり変数の参照を引数として渡します。これはどういうことかというと、プロシージャ内で仮引数の値を変更した場合、実引数として渡した変数の値も変更されるということです。 値渡しにするには変数名の前に ByVal キーワードを付けます(下記参照)
	Sub Square(ByVal num)
		num = num * num
		MsgBox("2乗した値 : " & num)
	End Sub
ちなみに参照渡しを明示的にするには ByRef キーワードを変数名の前に付けます!



ページのTOPへ



13.Functionステートメント

いわゆる関数です。

以下はFunctionステートメントの例です。
戻り値は関数名に戻り値を代入すればOKです。
Exit Functionを実行すると終了できます。

	Randomize
	MsgBox(GetRndAlpha())
	
	Function GetRndAlpha()
		Dim alpha
		alpha = Int(26 * Rnd) + &H41	'&H41="A" + 0~25
		GetRndAlpha = Chr( alpha )	'戻り値
	End Function



ページのTOPへ



14.Classステートメント

オブジェクトを定義します。

'オブジェクト定義
	Class Foo
		Function foo1
			MsgBox("foo1")
		End Function

		Function foo2
			MsgBox("foo2")
		End Function
	End Class

'オブジェクト作成&呼び出し
	Set obj = New Foo
	With obj
		.foo1()
		.foo2()
	End With


オブジェクトを定義するために必要な Public, Private も使えます。




ページのTOPへ



15.VB Scriptの関数一覧

(1)文字列処理関数

InputBox、MsgBox
Left、Right、LTrim、RTrim、Trim、LCase、UCase、Mid、Replace、StrReverse、String、Space
Len、InStr、InStrRev、StrComp
Asc、Chr
FormatCurrency、FormatDateTime、FormatNumber、FormatPercent

(2)数値演算関数

Sin、Cos、Tan、Atn、Sqr、Exp、Log
Int、Fix、Sgn、Abs、Round
Rnd, Randomize
Hex、Oct

(3)日付処理関数

Now、Date、Time
Year、Month、Day、Hour、Minute、Second、DatePart
MonthName、Weekday、WeekdayName、DateAdd、DateDiff
DateSerial、TimeSerial、DateValue、TimeValue、Timer

(4)データ型処理関数

TypeName、VarType
IsArray IsDate、IsNumeric、IsObject、IsEmpty、IsNull
CBool、CByte、CCur、CDate、CDbl、CInt、CLng、CSng、CStr

(5)配列処理関数

Array、Filter、Join、Split
LBound、UBound

(6)そのほかの関数

CreateObject、GetObject、GetRef、LoadPicture、GetLocale、SetLocale
ScriptEngine、ScriptEngineBuildVersion、ScriptEngineMajorVersion、ScriptEngineMinorVersion
RGB、Eval



ページのTOPへ






メニュー